package main.java.aplicacion.categorias.manejadores;


import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;

import main.java.aplicacion.ManejadorSistema;
import main.java.aplicacion.ManejadorSistemaError;
import main.java.aplicacion.categorias.excepciones.CategoriaError;
import main.java.aplicacion.categorias.manejadores.CategoriaMgr;

import main.java.aplicacion.categorias.interfaces.CategoriaMgt;
import main.java.aplicacion.categorias.entidades.Categoria;
//import main.java.aplicacion.juegos.entidades.Juego;

public class CategoriaMgr implements CategoriaMgt{
	

	public List<String> listarCategorias() throws ManejadorSistemaError {

		ManejadorSistema ms = ManejadorSistema.getInstance();
		return ms.listarCategorias();
	}

	public List<String> listarJuegosCategoria(String nom) throws CategoriaError {
		
		ManejadorSistema ms = ManejadorSistema.getInstance();
		Categoria c = ms.findCategoria(nom);
		if (c != null)
			return c.listarJuegos();
		else
			throw new CategoriaError(CategoriaError.TipoError.CATEGORIA_NO_EXISTE);
	}

	public  void altaCategoria(String nombre) throws CategoriaError{
		ManejadorSistema ms = ManejadorSistema.getInstance();
		if (nombre.isEmpty()){
			throw new CategoriaError(CategoriaError.TipoError.CATEGORIA_INVALIDO);
		}
		else {
			if(!(ms.memberCategoria(nombre))){
			Categoria c = new Categoria();
			c.setNombre(nombre);
			ms.addCategoria(c);
			}
			else 
				throw new CategoriaError(CategoriaError.TipoError.CATEGORIA_YA_EXISTE);
		}
	}

	public boolean existeCategoria(String nombre) {
		ManejadorSistema ms = ManejadorSistema.getInstance();
		if (ms.findCategoria(nombre) == null)
			return false;
		else
			return true;
	}

	public Categoria find(String nombre) {

		ManejadorSistema ms = ManejadorSistema.getInstance();
		return ms.findCategoria(nombre);
	}

	public List<Categoria> obtenerCategorias(List<String> list) {

		List<Categoria> cat = new LinkedList<Categoria>();
		ListIterator<String> it = list.listIterator();
		while (it.hasNext()) {
			Categoria c = this.find(it.next());
			if (c != null)
				cat.add(c);
		}
		return cat;
	}

}
